package br.com.foxinline.manager.criar;

import br.com.foxinline.enums.TipoTelefone;
import br.com.foxinline.modelo.Grupo;
import br.com.foxinline.modelo.Telefone;
import br.com.foxinline.modelo.Usuario;
import br.com.foxinline.servico.GrupoServico;
import br.com.foxinline.servico.UsuarioServico;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.DualListModel;

/**
 *
 * @author cadomeireles
 */
@ManagedBean
@ViewScoped
public class ManagerCriarUsuario {
    
    @EJB
    private UsuarioServico usuarioServico;
    @EJB
    private GrupoServico grupoServico;
    
    private Usuario usuario;
    private String confirmarSenha;
    
    private List<Grupo> todosGrupos;
    private List<Grupo> gruposSelecionados;
    private DualListModel<Grupo> grupoDualList;
    
    private String editarId;
    
    @PostConstruct
    public void init() {
        instanciar();
        delegar();
    }
    
    private void instanciar() {
        this.usuario = new Usuario();
        this.usuario.setTelefone(new Telefone());

        this.todosGrupos = grupoServico.pesquisarTodos();
        this.gruposSelecionados = new ArrayList<Grupo>();
        this.grupoDualList = new DualListModel<Grupo>(this.todosGrupos, this.gruposSelecionados);
    }
    
    private void delegar() {
        Map<String, String> parametros = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        this.editarId = parametros.get("usuarioId");
        
        if (editarId != null) {
            this.usuario = usuarioServico.pesquisar(Long.parseLong(editarId));

            Telefone telefone = usuarioServico.obterTelefone(this.usuario);
            if (telefone != null) {
                this.usuario.setTelefone(telefone);
            } else {
                this.usuario.setTelefone(new Telefone());
            }

            this.usuario.setGrupos(grupoServico.pesquisar(this.usuario));
            
            this.todosGrupos = grupoServico.pesquisarTodos();
            this.todosGrupos.removeAll(this.usuario.getGrupos());
            this.gruposSelecionados = this.usuario.getGrupos();
            this.grupoDualList = new DualListModel<Grupo>(this.todosGrupos, this.gruposSelecionados);
        }
    }
    
    public void salvar() {
        this.gruposSelecionados = this.grupoDualList.getTarget();
        this.usuario.setGrupos(this.gruposSelecionados);
        
        if (this.usuario.getId() == null) {
            if (usuarioServico.salvar(this.usuario, this.confirmarSenha)) {
                instanciar();
            }
        } else {
            usuarioServico.atualizar(this.usuario, this.confirmarSenha);
        }
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public String getConfirmarSenha() {
        return confirmarSenha;
    }

    public void setConfirmarSenha(String confirmarSenha) {
        this.confirmarSenha = confirmarSenha;
    }

    public DualListModel<Grupo> getGrupoDualList() {
        return grupoDualList;
    }

    public void setGrupoDualList(DualListModel<Grupo> grupoDualList) {
        this.grupoDualList = grupoDualList;
    }

    public List<Grupo> getGruposSelecionados() {
        return gruposSelecionados;
    }

    public void setGruposSelecionados(List<Grupo> gruposSelecionados) {
        this.gruposSelecionados = gruposSelecionados;
    }

    public List<Grupo> getTodosGrupos() {
        return todosGrupos;
    }

    public void setTodosGrupos(List<Grupo> todosGrupos) {
        this.todosGrupos = todosGrupos;
    }
    
}
